package com.huike.stock_analysis.service;

import java.text.DecimalFormat;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.huike.stock_analysis.dao.CapitalDao;
import com.huike.stock_analysis.entity.CapitalInfo;
import com.huike.stock_analysis.entity.Rank;


@Service
public class CapitalService {
	@Autowired
	private CapitalDao capitalDao;
	
	private List<CapitalInfo> capitalInfos;
	//保留四位小数
	private DecimalFormat df = new DecimalFormat("0.0000");
	
	/**
	 * 
	 * @param code
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  资金净流入
	 */
	
	public void setList(String code) {
		
			//查询数据库
			capitalInfos = capitalDao.queryCapital(code);
		
	}
	public Map<String, String> netFlow(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		setList(code);
		
		
		//遍历查询结果
		for(CapitalInfo capitalInfo : capitalInfos) {
			
			map.put(capitalInfo.getDate().toString(), df.format(capitalInfo.getNetFlow()));
		}
		
		return map;
	}
	
	/**
	 * 
	 * @param code
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  主力资金净流入
	 */
	public Map<String, String> mainNetFlow(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		setList(code);
		
		//遍历查询结果
		for(CapitalInfo capitalInfo : capitalInfos) {
			
			map.put(capitalInfo.getDate().toString(), df.format(capitalInfo.getMainNetFlow()));
		}
		
		return map;
	}
	
	/**
	 * 
	 * @param code
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  行业平均资金净流入
	 */
	public Map<String, String> netFlowOfSame(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		
		setList(code);
		
		//遍历查询结果
		for(CapitalInfo capitalInfo : capitalInfos) {
			
			map.put(capitalInfo.getDate().toString(), df.format(capitalInfo.getNetFlowOfSame()));
		}
		
		return map;
	}
	
	/**
	 * 
	 * @param code
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  行业平均主力资金净流入
	 */
	public Map<String, String> mainNetFlowOfSame(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		
		setList(code);
		
		//遍历查询结果
		for(CapitalInfo capitalInfo : capitalInfos) {
			
			map.put(capitalInfo.getDate().toString(), df.format(capitalInfo.getMainNetFlowOfSame()));
		}
		
		return map;
	}
	
	/**
	 * 
	 * @param code
	 * @return String
	 * 主力净流入占比
	 */
	public String mainFlowRatio(String code) {
		
		setList(code);
		
		CapitalInfo capitalInfo = capitalInfos.get(capitalInfos.size() - 1);
		
		
		return df.format(capitalInfo.getMainFlowRatio() / 100);
	}
	/**
	 * 
	 * @param code
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  TOP10
	 */
	public Map<String, String> top10(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		
		List<Rank> ranks = capitalDao.queryTop10(code);
		
		//遍历查询结果
		for(Rank rank : ranks) {
			
			map.put(rank.getName(), df.format(rank.getMoney() / 10000));
		}
		
		return map;
	}
	
	/**
	 * 
	 * @param code
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  Bottom10
	 */
	public Map<String, String> bottom10(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		
		List<Rank> ranks = capitalDao.queryBottom10(code);
		
		//遍历查询结果
		for(Rank rank : ranks) {
			
			map.put(rank.getName(), df.format(rank.getMoney() / 10000));
		}
		
		return map;
	}
	
	/**
	 * 
	 * @param code
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  资金流向 小单 中单 大单 超大单 涨跌幅
	 */
	public Map<String, String> flow(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		
		setList(code);
		
		for (CapitalInfo capitalInfo : capitalInfos) {
			map.put(capitalInfo.getDate().toString(), df.format(capitalInfo.getSmall() / 10000) + "," +df.format(capitalInfo.getMid() / 10000)
						+ "," + df.format(capitalInfo.getBig() / 10000) + "," + df.format(capitalInfo.getSuperBig() / 10000) + "," + Double.toString(capitalInfo.getChange()));
		}
		return map;
	}
	public String rank(String code) {
		return capitalDao.rank(code);
	}
	
}
